package com.ruoyi.system.domain;

import java.util.Date;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;

/**
 * 社团基本信息对象 clubs
 * 
 * @author ruoyi
 * @date 2025-06-27
 */
public class Clubs extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 社团ID，主键 */
    private Long clubId;

    /** 社团名称 */
    @Excel(name = "社团名称")
    private String name;

    /** 社团描述 */
    @Excel(name = "社团描述")
    private String description;

    /** 社团Logo URL路径 */
    @Excel(name = "社团Logo URL路径")
    private String logo;

    /** 分类 */
    @Excel(name = "分类")
    private String categoryName;

    /** 创始人ID */
    @Excel(name = "创始人ID")
    private Long founderId;

    /** 创始人姓名 */
    @Excel(name = "创始人姓名")
    private String currentLeaderName;

    /** 现任负责人ID */
    @Excel(name = "现任负责人ID")
    private Long currentLeaderId;

    /** 成员数量 */
    @Excel(name = "成员数量")
    private Integer memberCount;

    /** 加入条件 */
    @Excel(name = "加入条件")
    private String requirements;

    /** 状态：待审核, 已通过, 已拒绝, 已解散 */
    @Excel(name = "状态：待审核, 已通过, 已拒绝, 已解散")
    private String status;

    @Excel(name = "0-申请中, 1-已通过, 2-已拒绝")
    private Integer userStatus;

    /** 拒绝原因（如被拒绝） */
    @Excel(name = "拒绝原因", readConverterExp = "如=被拒绝")
    private String rejectReason;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date createdAt;

    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date updatedAt;


    private List<Members> membersList;


    private String sortBy;


    public String getSortBy() {
        return sortBy;
    }

    public void setSortBy(String sortBy) {
        this.sortBy = sortBy;
    }

    public List<Members> getMembersList() {
        return membersList;
    }

    public void setMembersList(List<Members> membersList) {
        this.membersList = membersList;
    }

    private Long applyId;

    private  Integer isFavorite;


    private Integer role;

    public Integer getRole() {
        return role;
    }

    public void setRole(Integer role) {
        this.role = role;
    }

    public Integer getIsFavorite() {
        return isFavorite;
    }

    public void setIsFavorite(Integer isFavorite) {
        this.isFavorite = isFavorite;
    }

    public Long getApplyId() {
        return applyId;
    }

    public void setApplyId(Long applyId) {
        this.applyId = applyId;
    }

    public Integer getUserStatus() {
        return userStatus;
    }

    public void setUserStatus(Integer userStatus) {
        this.userStatus = userStatus;
    }

    public void setClubId(Long clubId)
    {
        this.clubId = clubId;
    }

    public Long getClubId() 
    {
        return clubId;
    }

    public void setName(String name) 
    {
        this.name = name;
    }

    public String getName() 
    {
        return name;
    }

    public void setDescription(String description) 
    {
        this.description = description;
    }

    public String getDescription() 
    {
        return description;
    }

    public void setLogo(String logo) 
    {
        this.logo = logo;
    }

    public String getLogo() 
    {
        return logo;
    }

    public void setCategoryName(String categoryName) 
    {
        this.categoryName = categoryName;
    }

    public String getCategoryName() 
    {
        return categoryName;
    }

    public void setFounderId(Long founderId) 
    {
        this.founderId = founderId;
    }

    public Long getFounderId() 
    {
        return founderId;
    }

    public void setCurrentLeaderName(String currentLeaderName) 
    {
        this.currentLeaderName = currentLeaderName;
    }

    public String getCurrentLeaderName() 
    {
        return currentLeaderName;
    }

    public void setCurrentLeaderId(Long currentLeaderId) 
    {
        this.currentLeaderId = currentLeaderId;
    }

    public Long getCurrentLeaderId() 
    {
        return currentLeaderId;
    }

    public void setMemberCount(Integer memberCount)
    {
        this.memberCount = memberCount;
    }

    public Integer getMemberCount()
    {
        return memberCount;
    }

    public void setRequirements(String requirements) 
    {
        this.requirements = requirements;
    }

    public String getRequirements() 
    {
        return requirements;
    }

    public void setStatus(String status) 
    {
        this.status = status;
    }

    public String getStatus() 
    {
        return status;
    }

    public void setRejectReason(String rejectReason) 
    {
        this.rejectReason = rejectReason;
    }

    public String getRejectReason() 
    {
        return rejectReason;
    }

    public void setCreatedAt(Date createdAt) 
    {
        this.createdAt = createdAt;
    }

    public Date getCreatedAt() 
    {
        return createdAt;
    }

    public void setUpdatedAt(Date updatedAt) 
    {
        this.updatedAt = updatedAt;
    }

    public Date getUpdatedAt() 
    {
        return updatedAt;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("clubId", getClubId())
            .append("name", getName())
            .append("description", getDescription())
            .append("logo", getLogo())
            .append("categoryName", getCategoryName())
            .append("founderId", getFounderId())
            .append("currentLeaderName", getCurrentLeaderName())
            .append("currentLeaderId", getCurrentLeaderId())
            .append("memberCount", getMemberCount())
            .append("requirements", getRequirements())
            .append("status", getStatus())
            .append("rejectReason", getRejectReason())
            .append("createdAt", getCreatedAt())
            .append("updatedAt", getUpdatedAt())
            .toString();
    }
}
